--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / tests / frontend / ConversationViewerReactions.test.js
Displaying Raw • Download
tests/frontend/ConversationViewerReactions.test.js bce42bcdce0e7d2c6d78228e864a4cd1d974cc82 (bce42bcd) Text, 12.05 KB
Tff7b72import Tb4b4b4{ Te6edf3mountTb4b4b4, Te6edf3flushPromises Tb4b4b4} Tff7b72from Ta5d6ff"@vue/test-utils"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3itTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3viTb4b4b4, Te6edf3beforeEachTb4b4b4, Te6edf3afterEach Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Te6edf3ConversationViewer Tff7b72from Ta5d6ff"@/components/messages/ConversationViewer.vue"Tb4b4b4;
Tff7b72import Te6edf3WebSocketConnection Tff7b72from Ta5d6ff"@/js/WebSocketConnection"Tb4b4b4;
Tff7b72import Te6edf3GlobalState Tff7b72from Ta5d6ff"@/js/GlobalState"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"@/js/ToastUtils"Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"ConversationViewer reactions"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3axiosMockTb4b4b4;
Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3configTb4b4b4.Te6edf3theme Tff7b72= Ta5d6ff"light"Tb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3configTb4b4b4.Te6edf3message_outbound_bubble_color Tff7b72= Ta5d6ff"#4f46e5"Tb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3configTb4b4b4.Te6edf3message_waiting_bubble_color Tff7b72= Ta5d6ff"#e5e7eb"Tb4b4b4;
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3connectTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMock Tff7b72= Tb4b4b4{
Te6edf3getTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3postTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"reaction-hash"Tb4b4b4,
Te6edf3is_reactionTff7b72: Tff7b72trueTb4b4b4,
Te6edf3reaction_toTff7b72: Ta5d6ff"msg-hash"Tb4b4b4,
Te6edf3reaction_emojiTff7b72: Ta5d6ff"\u{1F44D}"Tb4b4b4,
Te6edf3reaction_senderTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3api Tff7b72= Te6edf3axiosMockTb4b4b4;
Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3ToastUtilsTb4b4b4, Ta5d6ff"error"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3consoleTb4b4b4, Ta5d6ff"error"Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72delete Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4;
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3destroyTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3viTb4b4b4.Te6edf3restoreAllMocksTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3mountViewer Tff7b72= Tb4b4b4(Te6edf3props Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4=>
Te6edf3mountTb4b4b4(Te6edf3ConversationViewerTb4b4b4, Tb4b4b4{
Te6edf3propsTff7b72: Tb4b4b4{
Te6edf3selectedPeerTff7b72: Tb4b4b4{ Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4, Te6edf3display_nameTff7b72: Ta5d6ff"Test Peer" Tb4b4b4}Tb4b4b4,
Te6edf3myLxmfAddressHashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3conversationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Tb4b4b4...Te6edf3propsTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3directivesTff7b72: Tb4b4b4{ Ta5d6ff"click-outside"Tff7b72: Tb4b4b4{ Te6edf3mountedTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3unmountedTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4,
Te6edf3mocksTff7b72: Tb4b4b4{ Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3key Tb4b4b4}Tb4b4b4,
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3AddImageButtonTff7b72: Tff7b72trueTb4b4b4,
Te6edf3AddAudioButtonTff7b72: Tff7b72trueTb4b4b4,
Te6edf3SendMessageButtonTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ConversationDropDownMenuTff7b72: Tff7b72trueTb4b4b4,
Te6edf3PaperMessageModalTff7b72: Tff7b72trueTb4b4b4,
Te6edf3AudioWaveformPlayerTff7b72: Tff7b72trueTb4b4b4,
Te6edf3LxmfUserIconTff7b72: Tff7b72trueTb4b4b4,
Ta5d6ff"emoji-picker"Tff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3parentChatItem Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3is_outboundTff7b72: Tff7b72falseTb4b4b4,
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"msg-hash"Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"hello"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3reactionsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"sends a reaction and optimistically attaches it to the parent"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3chatItemTb4b4b4]Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sendReactionEmojiFromMenuTb4b4b4(Te6edf3chatItemTb4b4b4, Ta5d6ff"\u{1F44D}"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Ta5d6ff"/api/v1/lxmf-messages/reactions"Tb4b4b4, Tb4b4b4{
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3target_message_hashTff7b72: Ta5d6ff"msg-hash"Tb4b4b4,
Te6edf3emojiTff7b72: Ta5d6ff"\u{1F44D}"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactionsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactionsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4.Te6edf3toMatchObjectTb4b4b4(Tb4b4b4{
Te6edf3emojiTff7b72: Ta5d6ff"\u{1F44D}"Tb4b4b4,
Te6edf3senderTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3reactionHashTff7b72: Ta5d6ff"reaction-hash"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"toasts and does not crash when reaction API fails"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockRejectedValueOnceTb4b4b4(Tb4b4b4{ Te6edf3responseTff7b72: Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3messageTff7b72: Ta5d6ff"No path" Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3chatItemTb4b4b4]Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sendReactionEmojiFromMenuTb4b4b4(Te6edf3chatItemTb4b4b4, Ta5d6ff"\u{1F44D}"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Ta5d6ff"messages.reaction_send_failed"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactionsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"ignores null/invalid chatItem and emoji without throwing"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockClearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sendReactionEmojiFromMenuTb4b4b4(Tff7b72nullTb4b4b4, Ta5d6ff"\u{1F44D}"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3resolvesTb4b4b4.Te6edf3toBeUndefinedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sendReactionEmojiFromMenuTb4b4b4(Tb4b4b4{ Te6edf3lxmf_messageTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3resolvesTb4b4b4.Te6edf3toBeUndefinedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sendReactionEmojiFromMenuTb4b4b4(Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72nullTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3resolvesTb4b4b4.Te6edf3toBeUndefinedTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3reactionPosts Tff7b72= Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockTb4b4b4.Te6edf3callsTb4b4b4.Te6edf3filterTb4b4b4(
Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4=> Tff7b72typeof Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=== Ta5d6ff"string" Tff7b72&& Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/lxmf-messages/reactions"Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3reactionPostsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"dedupes concurrent double-taps of the same reaction (Android race)"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3resolvePostTb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4.Te6edf3mockImplementationTb4b4b4(
Tb4b4b4(Tb4b4b4) Tb4b4b4=>
Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3resolvePost Tff7b72= Te6edf3resolveTb4b4b4;
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3chatItemTb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3p1 Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sendReactionEmojiFromMenuTb4b4b4(Te6edf3chatItemTb4b4b4, Ta5d6ff"\u{1F44D}"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3p2 Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3sendReactionEmojiFromMenuTb4b4b4(Te6edf3chatItemTb4b4b4, Ta5d6ff"\u{1F44D}"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3postTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTimesTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3resolvePostTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3lxmf_messageTff7b72: Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"reaction-hash"Tb4b4b4,
Te6edf3is_reactionTff7b72: Tff7b72trueTb4b4b4,
Te6edf3reaction_toTff7b72: Ta5d6ff"msg-hash"Tb4b4b4,
Te6edf3reaction_emojiTff7b72: Ta5d6ff"\u{1F44D}"Tb4b4b4,
Te6edf3reaction_senderTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Tffa657PromiseTb4b4b4.Te6edf3allTb4b4b4(Tb4b4b4[Te6edf3p1Tb4b4b4, Te6edf3p2Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactionsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"applyIncomingReaction merges case-insensitively and upgrades null reactionHash"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3hash Tff7b72= Ta5d6ff"AaBbCcDdEeFf00112233445566778899"Tb4b4b4;
Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactions Tff7b72= Tb4b4b4[Tb4b4b4{ Te6edf3emojiTff7b72: Ta5d6ff"\u{1F44D}"Tb4b4b4, Te6edf3senderTff7b72: Ta5d6ff"My-Hash"Tb4b4b4, Te6edf3reactionHashTff7b72: Tff7b72null Tb4b4b4}Tb4b4b4]Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3chatItemTb4b4b4]Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3applyIncomingReactionTb4b4b4(Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"server-reaction"Tb4b4b4,
Te6edf3is_reactionTff7b72: Tff7b72trueTb4b4b4,
Te6edf3reaction_toTff7b72: Ta5d6ff"aabbccddeeff00112233445566778899"Tb4b4b4,
Te6edf3reaction_emojiTff7b72: Ta5d6ff"\u{1F44D}"Tb4b4b4,
Te6edf3reaction_senderTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactionsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactionsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3reactionHashTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"server-reaction"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"applyIncomingReaction tolerates malformed payloads"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4]Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3applyIncomingReactionTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3applyIncomingReactionTb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3applyIncomingReactionTb4b4b4(Tb4b4b4{ Te6edf3reaction_toTff7b72: Ta5d6ff"missing"Tb4b4b4, Te6edf3reaction_emojiTff7b72: Ta5d6ff"x" Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=>
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3applyIncomingReactionTb4b4b4(Tb4b4b4{
Te6edf3reaction_toTff7b72: Ta5d6ff"msg-hash"Tb4b4b4,
Te6edf3reaction_emojiTff7b72: T79c0ff123Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"peer"Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactionsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"onLxmfMessageCreated applies outbound reactions instead of inserting a bubble"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3chatItemTb4b4b4]Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onLxmfMessageCreatedTb4b4b4(Tb4b4b4{
Te6edf3hashTff7b72: Ta5d6ff"out-reaction"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"test-hash"Tb4b4b4,
Te6edf3source_hashTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Te6edf3is_reactionTff7b72: Tff7b72trueTb4b4b4,
Te6edf3reaction_toTff7b72: Ta5d6ff"msg-hash"Tb4b4b4,
Te6edf3reaction_emojiTff7b72: Ta5d6ff"\u2764\uFE0F"Tb4b4b4,
Te6edf3reaction_senderTff7b72: Ta5d6ff"my-hash"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItemsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactionsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3chatItemTb4b4b4.Te6edf3lxmf_messageTb4b4b4.Te6edf3reactionsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3emojiTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"\u2764\uFE0F"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"does not crash when Android touchcancel fires after picker close mid-drag"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3chatItem Tff7b72= Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3chatItems Tff7b72= Tb4b4b4[Te6edf3chatItemTb4b4b4]Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3openReactionPickerTb4b4b4(Te6edf3chatItemTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3panel Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"div"Tb4b4b4)Tb4b4b4;
Te6edf3panelTb4b4b4.Te6edf3getBoundingClientRect Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Te6edf3leftTff7b72: T79c0ff10Tb4b4b4,
Te6edf3topTff7b72: T79c0ff20Tb4b4b4,
Te6edf3widthTff7b72: T79c0ff200Tb4b4b4,
Te6edf3heightTff7b72: T79c0ff300Tb4b4b4,
Te6edf3rightTff7b72: T79c0ff210Tb4b4b4,
Te6edf3bottomTff7b72: T79c0ff320Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$refsTb4b4b4.Te6edf3reactionPickerPanel Tff7b72= Te6edf3panelTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onReactionPickerDragStartTb4b4b4(Tb4b4b4{
Te6edf3touchesTff7b72: Tb4b4b4[Tb4b4b4{ Te6edf3clientXTff7b72: T79c0ff15Tb4b4b4, Te6edf3clientYTff7b72: T79c0ff25 Tb4b4b4}Tb4b4b4]Tb4b4b4,
Te6edf3preventDefaultTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3reactionDragStateTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Closing the picker (or Android touchcancel) must remove listeners safely.
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3closeReactionPickerTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3reactionDragStateTb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657documentTb4b4b4.Te6edf3dispatchEventTb4b4b4(Tff7b72new Te6edf3EventTb4b4b4(Ta5d6ff"touchmove"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3dispatchEventTb4b4b4(Tff7b72new Te6edf3EventTb4b4b4(Ta5d6ff"touchcancel"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3dispatchEventTb4b4b4(Tff7b72new Te6edf3EventTb4b4b4(Ta5d6ff"touchend"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3dispatchEventTb4b4b4(Tff7b72new Te6edf3EventTb4b4b4(Ta5d6ff"mousemove"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"cleans up reaction drag listeners on unmount"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3openReactionPickerTb4b4b4(Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3panel Tff7b72= Tffa657documentTb4b4b4.Te6edf3createElementTb4b4b4(Ta5d6ff"div"Tb4b4b4)Tb4b4b4;
Te6edf3panelTb4b4b4.Te6edf3getBoundingClientRect Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Te6edf3leftTff7b72: T79c0ff0Tb4b4b4,
Te6edf3topTff7b72: T79c0ff0Tb4b4b4,
Te6edf3widthTff7b72: T79c0ff100Tb4b4b4,
Te6edf3heightTff7b72: T79c0ff100Tb4b4b4,
Te6edf3rightTff7b72: T79c0ff100Tb4b4b4,
Te6edf3bottomTff7b72: T79c0ff100Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$refsTb4b4b4.Te6edf3reactionPickerPanel Tff7b72= Te6edf3panelTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onReactionPickerDragStartTb4b4b4(Tb4b4b4{ Te6edf3clientXTff7b72: T79c0ff1Tb4b4b4, Te6edf3clientYTff7b72: T79c0ff2 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tff7b72typeof Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3reactionDragCleanupTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"function"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tffa657documentTb4b4b4.Te6edf3dispatchEventTb4b4b4(Tff7b72new Te6edf3EventTb4b4b4(Ta5d6ff"touchmove"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657documentTb4b4b4.Te6edf3dispatchEventTb4b4b4(Tff7b72new Te6edf3EventTb4b4b4(Ta5d6ff"touchend"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"reactionReactorLabel never throws on bad sender values"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3reactionReactorLabelTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3reactionReactorLabelTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3reactionReactorLabelTb4b4b4(T79c0ff12Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"<"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3reactionReactorLabelTb4b4b4(Ta5d6ff"my-hash"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"messages.reaction_you"Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"emoji click closes picker and sends without throwing when detail is missing"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountViewerTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3openReactionPickerTb4b4b4(Te6edf3parentChatItemTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onReactionPickerEmojiClickTb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onReactionPickerEmojiClickTb4b4b4(Tb4b4b4{ Te6edf3detailTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// Malformed picker events leave the picker open so the user can try again.
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3reactionPickerChatItemTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onReactionPickerEmojiClickTb4b4b4(Tb4b4b4{ Te6edf3detailTff7b72: Tb4b4b4{ Te6edf3unicodeTff7b72: Ta5d6ff"\u{1F44D}" Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toThrowTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3reactionPickerChatItemTb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3unmountTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────